const crypto = require('crypto');
const algorithm = 'aes-256-cbc'; // 加密算法和操作模式
const key = 'myblog123456'
module.exports = {
    // 加密 将对象中的每个属性
    /* 
    将属性值用空格分割进行字符串拼接，在加上blog四个字符
    然后使用密匙的方式进行加密，这样整体就是 口令加盐再签名加密的方式，最后以cookie的形式返回，
    
    例如 {name:'lihua',pas:'123'} =》 'lihua 123 blog'
    */
    EnCode: function (obj) {
        let str = ''
        for (let key in obj) {
            str = str + obj[key] + ' '
        }
        str += 'blog'
        // 如下方法使用指定的算法与密码来创建cipher对象
        const cipher = crypto.createCipher(algorithm, key);
        // 使用该对象的update方法来指定需要被加密的数据
        let crypted = cipher.update(str, 'utf-8', 'hex');
        crypted += cipher.final('hex');
        return crypted;
    },
    // 解密
    OnCode: function (encrypted) {
        const decipher = crypto.createDecipher(algorithm, key);
        let decrypted = decipher.update(encrypted, 'hex', 'utf-8');
        decrypted += decipher.final('utf-8');
        // 以数组的形式按序返回对应的值
        let temp = decrypted.split(" ")
        // console.log('解密结果',temp)
        return temp.slice(0, temp.length - 1)
    }

}